/* @author cerimice */
package Persistencia.Definicion;

import Sistema.Configuracion;

import java.util.Date;
import java.io.Serializable;

import java.util.Collection;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.NamedQuery;
import javax.persistence.NamedQueries;

import javax.persistence.OneToOne;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;

@Entity
@Table(name="usuario")
@NamedQueries
    ({
    @NamedQuery(name="usuario.buscarClave",     query="SELECT u FROM Usuario u WHERE u.clave LIKE (:valor) ORDER BY u.nombre"),
    @NamedQuery(name="usuario.buscarNombre",    query="SELECT u FROM Usuario u WHERE u.nombre LIKE (:valor) ORDER BY u.nombre"),
    @NamedQuery(name="usuario.buscarPaterno",   query="SELECT u FROM Usuario u WHERE u.paterno LIKE (:valor) ORDER BY u.nombre"),
    @NamedQuery(name="usuario.buscarMaterno",   query="SELECT u FROM Usuario u WHERE u.materno LIKE (:valor) ORDER BY u.nombre"),
    @NamedQuery(name="usuario.buscarUsuario",   query="SELECT u FROM Usuario u WHERE u.usuario IN (:valor) ORDER BY u.nombre")
    })

public class Usuario  implements Serializable
    {
    @Id
    @Basic(optional=false)
    @Column(name="clave",nullable=false)
    private String clave;
    
    @Basic(optional=false)
    @Column(name="nombre",nullable=false)
    private String nombre;
    
    @Basic(optional=false)
    @Column(name="paterno",nullable=false)
    private String paterno;
    
    @Basic(optional=false)
    @Column(name="materno",nullable=false)
    private String materno;
    
    @Basic(optional=false)
    @Column(name="direccion",nullable=false)
    private String direccion;
    
    @Basic(optional=false)
    @Column(name="estado",nullable=false)
    private int estado;
    
    @Basic(optional=false)
    @Column(name="municipio",nullable=false)
    private int municipio;
    
    @Basic(optional=false)
    @Column(name="codigoPostal",nullable=false)
    private String codigoPostal;
    
    @Basic(optional=false)
    @Column(name="telefonoFijo",nullable=false)
    private String telefonoFijo;
    
    @Basic(optional=false)
    @Column(name="telefonoMovil",nullable=false)
    private String telefonoMovil;
    
    @Basic(optional=false)
    @Column(name="email",nullable=false)
    private String email;
    
    @Basic(optional=false)
    @Column(name="usuario",nullable=false)
    private String usuario;
    
    @Basic(optional=false)
    @Column(name="password",nullable=false)
    private String password;
    
    @Basic(optional=false)
    @Column(name="permiso",nullable=false)
    private int permiso;
    
    @JoinColumn(name="permiso",referencedColumnName="clave",insertable=false,updatable=false)
    @ManyToOne(fetch=FetchType.LAZY)
    private Permiso objPermiso;
    
    @OneToMany(mappedBy="objUsuario",cascade=CascadeType.ALL)
    private Collection<OrdenServicio> ordenes;
    
    public Usuario()
        {clave = Configuracion.getFormatoClave().format(new Date());}

    public String getClave()                            {return clave;}
    public String getNombre()                           {return nombre;}
    public String getPaterno()                          {return paterno;}
    public String getMaterno()                          {return materno;}
    public String getDireccion()                        {return direccion;}
    public int getEstado()                              {return estado;}
    public int getMunicipio()                           {return municipio;}
    public String getCodigoPostal()                     {return codigoPostal;}
    public String getTelefonoFijo()                     {return telefonoFijo;}
    public String getTelefonoMovil()                    {return telefonoMovil;}
    public String getEmail()                            {return email;}
    public String getUsuario()                          {return usuario;}
    public String getPassword()                         {return password;}
    public int getPermiso()                             {return permiso;}

    public void setClave(String clave)                  {this.clave = clave;}
    public void setNombre(String nombre)                {this.nombre = nombre;}
    public void setPaterno(String paterno)              {this.paterno = paterno;}
    public void setMaterno(String materno)              {this.materno = materno;}
    public void setDireccion(String direccion)          {this.direccion = direccion;}
    public void setEstado(int estado)                   {this.estado = estado;}
    public void setMunicipio(int municipio)             {this.municipio = municipio;}
    public void setCodigoPostal(String codigoPostal)    {this.codigoPostal = codigoPostal;}
    public void setTelefonoFijo(String telefonoFijo)    {this.telefonoFijo = telefonoFijo;}
    public void setTelefonoMovil(String telefonoMovil)  {this.telefonoMovil = telefonoMovil;}
    public void setEmail(String email)                  {this.email = email;}
    public void setUsuario(String usuario)              {this.usuario = usuario;}
    public void setPassword(String password)            {this.password = password;}
    public void setPermiso(int permiso)                 {this.permiso = permiso;}
    
    public String getNombreCompleto()                   {return nombre+" "+paterno+" "+materno;}
    
    public Permiso getObjPermiso()                      {return objPermiso;}
    public Collection<OrdenServicio> getOrdenes()       {return ordenes;}
    }
